package com.demo.rabbitmq;

import com.rabbitmq.client.Channel;
import com.rabbitmq.client.Connection;
import com.rabbitmq.client.ConnectionFactory;

import java.io.IOException;
import java.nio.charset.StandardCharsets;
import java.util.concurrent.TimeoutException;

/**
 * Hello world!
 */
public class Producer {
    public static void main(String[] args) throws IOException, TimeoutException {
        //创建连接工厂
        ConnectionFactory connectionFactory = new ConnectionFactory();

        //设置主机地址
        connectionFactory.setHost("localhost");

        //设置连接端口号，默认：5672
        connectionFactory.setPort(5672);

        //设置虚拟主机名称，默认: /
        connectionFactory.setVirtualHost("/");

        //设置连接用户名
        connectionFactory.setUsername("guest");

        //设置连接密码
        connectionFactory.setPassword("guest");

        //创建连接
        Connection connection = connectionFactory.newConnection();

        //创建频道
        Channel channel = connection.createChannel();

        //创建队列
        //queue       参数1：队列名称
        //durable     参数2：是否定义持久化队列，当MQ重启之后还在
        //exclusive   参数3：是否独占本次连接，若独占，只能有一个消费者监听这个队列，且Connection关闭时删除这个队列
        //autoDelete  参数4：是否在不使用的时候自动删除队列，也就是在没有Consumer时自动删除
        //arguments   参数5：队列其他参数
        channel.queueDeclare("simple_queue", true, false, false, null);

        //要发送的数据
        String message = "你好：小子！";

        //参数1：交换机名称，如果没有指定则使用默认交换器(Default Exchange)
        //参数2：路由key，简单模式可以传递队列名称
        //参数3：配置信息
        //参数4：消息内容
        channel.basicPublish("", "simple_queue", null, message.getBytes(StandardCharsets.UTF_8));

        System.out.println("已发送消息：" + message);

        //关闭资源
        channel.close();
        connection.close();
    }
}
